package com.crm.user.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Repository;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import com.crm.base.controller.BaseController;
import com.crm.user.model.UserAccount;


/**
 * SpringMVC中的Interceptor拦截器
 * 作用：拦截用户请求并进行处理
 * 权限验证，判断用户是否登录，各种判断
 * 个人登录拦截器
 */
@Repository
//实现HandlerInterceptor接口--》 implements HandlerInterceptor
public class UserLoginInterceptor extends BaseController implements
		HandlerInterceptor {

	/**
	 * preHandle 在请求处理之前调用
	 * Interceptor 是链式的调用的
	 * 所以，在一个请求中可以有多个Interceptor
	 * 根据申明顺序依次执行，最先执行的是preHandle方法
	 * 可以在这个方法中进行前置初始化操作或对请求进行预处理或判断请求是否继续执行
	 * 返回值为boolean类型，返回false请求结束，后续方法不再执行
	 * 返回true则继续执行下面的方法
	 * */
	@Override
	public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1,
			Object arg2) throws Exception {
		
		UserAccount user = getLoginUser();
		if (user == null || user.getId() == null) {
			arg1.sendRedirect("/");
			return false;
		}
		return true;
	}
	
	/**
	 * postHandle 在DispatcherServlet 进行视图返回渲染之前被调用
	 * 在该方法中对Controller 处理之后的ModelAndView 对象进行操作
	 * postHandle 方法被调用的方向跟preHandle 是相反的
	 * 先声明的Interceptor 的postHandle 方法会后执行
	 * */
	@Override
	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
			Object arg2, ModelAndView arg3) throws Exception {
		// TODO Auto-generated method stub

	}
	
	/**
	 * afterCompletion 在整个请求结束后才执行
	 * 该方法主要用于资源清理
	 * */
	@Override
	public void afterCompletion(HttpServletRequest arg0,
			HttpServletResponse arg1, Object arg2, Exception arg3)
			throws Exception {
		// TODO Auto-generated method stub

	}



}
